{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "深度学习入门（斋藤康毅）.ipynb",
      "provenance": [],
      "collapsed_sections": [],
      "toc_visible": true,
      "authorship_tag": "ABX9TyPSwFOTlvzPaaRJ8SLllFqw",
      "include_colab_link": true
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/jinxiqinghuan/learn_pytorch/blob/main/%E9%BE%99%E6%9B%B2%E8%89%AF%E8%80%81%E5%B8%88%E8%AF%BE%E7%A8%8B%E7%AC%94%E8%AE%B0/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%85%A5%E9%97%A8%EF%BC%88%E6%96%8B%E8%97%A4%E5%BA%B7%E6%AF%85%EF%BC%89.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "K9WxEjgcti5J"
      },
      "source": [
        "# 深度学习入门：基于Python的理论与实现"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "e8etck1pu5Yx"
      },
      "source": [
        "import numpy as np\r\n",
        "import matplotlib.pylab as plt"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "l2zQ4ENMttAo"
      },
      "source": [
        "## 第二章 感知机"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "tNYatjcttYt6"
      },
      "source": [
        "# 与门\r\n",
        "def AND(x1, x2):\r\n",
        "  w1, w2, theta = 0.5, 0.5, 0.7\r\n",
        "  tmp = x1*w1 + x2*w2\r\n",
        "  if tmp <= theta:\r\n",
        "    return 0\r\n",
        "  elif tmp > theta:\r\n",
        "    return 1\r\n",
        " "
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Umov0xXouaI1",
        "outputId": "51871aa2-bed8-42f2-d5e4-d38349ac32b9"
      },
      "source": [
        "(AND(0, 0),AND(1, 0),AND(0, 1),AND(1, 1))"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(0, 0, 0, 1)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 8
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "dvW2TZJau14U"
      },
      "source": [
        "x = np.array([0, 1])\r\n",
        "w = np.array([0.5, 0.5])\r\n",
        "b = -0.7"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "376HYweJvEyz",
        "outputId": "11bd3684-543b-406a-9ac3-1ca52ac16fa9"
      },
      "source": [
        "w*x"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([0. , 0.5])"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 13
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Om9sY0_fvGIB",
        "outputId": "c35335a1-c6f4-47f9-df7b-4ad8ec1b35bd"
      },
      "source": [
        "np.sum(w*x) + b"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "-0.19999999999999996"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 14
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "_WacQ_7SwEVu"
      },
      "source": [
        "这里把−θ命名为偏置b，但是请注意，偏置和权重w1、 w2的作用是不\r\n",
        "一样的。具体地说， w1和w2是控制输入信号的重要性的参数，而偏置是调\r\n",
        "整神经元被激活的容易程度（输出信号为1的程度）的参数"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "EoNMKTrkvL_E"
      },
      "source": [
        "def AND(x1, x2):\r\n",
        "  x = np.array([x1, x2])\r\n",
        "  w = np.array([0.5, 0.5])\r\n",
        "  b = -0.7\r\n",
        "  tmp = np.sum(w*x) + b\r\n",
        "  if tmp <= 0:\r\n",
        "    return 0\r\n",
        "  else:\r\n",
        "    return 1"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "LFwBMdH1vzMl",
        "outputId": "ecd85a33-d134-4fe8-eb3a-2d19ec56987c"
      },
      "source": [
        "(AND(0, 0),AND(1, 0),AND(0, 1),AND(1, 1))"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(0, 0, 0, 1)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 28
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "-cWJyQ7Dv1TZ"
      },
      "source": [
        "# 非门\r\n",
        "def NAND(x1, x2):\r\n",
        "  x = np.array([x1, x2])\r\n",
        "  w = np.array([-0.5, -0.5]) # 仅权重和偏置与AND不同\r\n",
        "  b = 0.7\r\n",
        "  tmp = np.sum(w*x) + b\r\n",
        "  if tmp <= 0:\r\n",
        "    return 0\r\n",
        "  else:\r\n",
        "    return 1"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "T-01SoNoxJvr",
        "outputId": "56ad17a8-70a1-4613-9f7b-fa2d4b28d1d1"
      },
      "source": [
        "(NAND(0, 0), NAND(1, 0), NAND(0, 1), NAND(1, 1))"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(1, 1, 1, 0)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 31
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "rUhONvpdxV23"
      },
      "source": [
        "# 或门\r\n",
        "def OR(x1, x2):\r\n",
        "  x = np.array([x1, x2])\r\n",
        "  w = np.array([0.5, 0.5])\r\n",
        "  b = -0.2\r\n",
        "  tmp = np.sum(w*x) + b\r\n",
        "  if tmp <= 0:\r\n",
        "    return 0\r\n",
        "  else:\r\n",
        "    return 1 "
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "ITC2KgEqx349",
        "outputId": "dc590a12-dece-4ac2-cb5a-e26d8c7f4a36"
      },
      "source": [
        "(OR(0, 0), OR(1, 0), OR(0, 1), OR(1, 1))"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(0, 1, 1, 1)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 33
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "oNSZCj6Px9Ih"
      },
      "source": [
        "# 异或门\r\n",
        "# 单层感知机不能实现异或门，只能采用多层感知机来实现\r\n",
        "def XOR(x1, x2):\r\n",
        "  s1 = NAND(x1, x2)\r\n",
        "  s2 = OR(x1, x2)\r\n",
        "  y = AND(s1, s2)\r\n",
        "  return y"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "QIC5GB3-ykbA",
        "outputId": "7445766a-d21d-4247-92e9-365b95f9fea2"
      },
      "source": [
        "(XOR(0, 0), XOR(1, 0), XOR(0, 1), XOR(1, 1))"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(0, 1, 1, 0)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 36
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "W4odfjPE3sct"
      },
      "source": [
        "## 第三章 神经网络"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "gGwgYWfHy0_q"
      },
      "source": [
        "# 阶跃函数\r\n",
        "def step_function(x):\r\n",
        "  return np.array(x>0, dtype=np.int)"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 281
        },
        "id": "fvdZs0hL2b2j",
        "outputId": "1fd99f89-2470-4145-9cd9-e4ac169384c1"
      },
      "source": [
        "x = np.arange(-5.0, 5.0, 0.1)\r\n",
        "y = step_function(x)\r\n",
        "plt.title('step_function')\r\n",
        "plt.plot(x, y)\r\n",
        "plt.ylim(-0.1, 1.1)\r\n",
        "plt.show()"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "XsRaXISl3D-W",
        "outputId": "c0131f70-df6f-4786-8e60-883480c8c609"
      },
      "source": [
        "x = np.arange(-5.0, 5.0, 0.1)\r\n",
        "x.shape"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(100,)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 46
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "3CDzxgBh3TKj",
        "outputId": "c6bb6640-f9e0-4461-f8ae-2ae7055d3a6a"
      },
      "source": [
        "np.array(x>0, dtype=np.int)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
              "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
              "       0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
              "       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
              "       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 47
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "2TIOP9243bCi"
      },
      "source": [
        "# sigmoid函数\r\n",
        "def sigmoid(x):\r\n",
        "  return 1 / (1 + np.exp(-x))"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "F4gVI2sj32aF",
        "outputId": "e4bc0015-f2f2-4675-db9e-5e08b0541432"
      },
      "source": [
        "x = np.array([-1.0, 1.0, 2.0])\r\n",
        "sigmoid(x)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([0.26894142, 0.73105858, 0.88079708])"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 51
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 281
        },
        "id": "0bZOtqph4NOk",
        "outputId": "56b44d1b-8abe-445f-ea45-801f5876c6c1"
      },
      "source": [
        "x = np.arange(-5.0, 5.0, 0.1)\r\n",
        "y = sigmoid(x)\r\n",
        "plt.title('sigmoid')\r\n",
        "plt.plot(x, y)\r\n",
        "plt.ylim(-0.1, 1.1)\r\n",
        "plt.show()"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAEICAYAAABPgw/pAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3dd1zd9d338dcnbAKBDDKATLOMMTEG46xajTauxMtRo3e1ztiratVaW1dtq71btUPtXS9H7VU1jjSuNq3RWL2tejlD9jCDTMgCQtjzwOf+A/RGJIYkB35weD8fDx7hnPPl/N4nwPvx5Xt+w9wdERHp+noEHUBERMJDhS4iEiFU6CIiEUKFLiISIVToIiIRQoUuIhIhVOgSUczsDjN7srNt18w2m9nUjswk3Y9pP3SR9mdmm4Gr3f2toLNI5NIMXUQkQqjQpcsys5+Y2TYzKzOztWZ2qpn93MyebTbmMjPbYma7zeynzZc+msa+aGbPNj3HCjMbbWa3m1m+meWa2enNnivdzOaZWZGZ5ZjZNc0ea7ndS5tt986O+j+R7k2FLl2SmY0BrgeOcvdk4FvA5hZjxgH/BfwvYBCQAmS0eKpzgNlAb2AJsIDG34sM4B7g8WZj5wB5QDpwAfArMzullWzjgEeBS5vG9gUyD/jFirSRCl26qnogDhhnZjHuvtndN7QYcwHwD3f/H3evBe4GWr5p9L67L3D3EPAikAbc5+51NBb4MDNLNbPBwPHAT9y92t2XAk8Cl7WS7QLgn+7+nrvXAD8FGsLzskX2ToUuXZK75wA3AT8H8s1sjpmltxiWDuQ2+5pKYHeLMbuafV4FFLp7fbPbAElNz1Xk7mXNxm/hqzP+1rZb0cp2RcJOhS5dlrs/7+4nAENpnHnf32LIDpotdZhZAo3LHwdiO9DHzJKb3TcE2NbK2B3A4GbbTTyI7Yq0mQpduiQzG2Nmp5hZHFBN42y65bLGS8A5ZnacmcXSOJu3A9meu+cCHwK/NrN4M5sAXAU828rwl4CzzeyEpu3eg37XpAPoh0y6qjjgPqAQ2An0B25vPsDdVwE30LgWvgMoB/KBmgPc5sXAMBpn668CP2ttv/Km7V4HPN+03T00vpkq0q50YJF0G2aWBBQDo9x9U9B5RMJNM3SJaGZ2jpklmllP4LfAClrs3igSKVToEulm0LhEsh0YBcx0/VkqEUpLLiIiEUIzdBGRCBEd1Ib79evnw4YNC2rzIiJd0qJFiwrdPa21xwIr9GHDhpGdnR3U5kVEuiQz27K3x7TkIiISIVToIiIRQoUuIhIhVOgiIhFChS4iEiFU6CIiEUKFLiISIVToIiIRQoUuIhIhVOgiIhFChS4iEiFU6CIiEUKFLiISIfZZ6Gb232aWb2Yr9/K4mdkfzCzHzJab2ZHhjykiIvvSlhn6U8C0r3n8DBov7TUKmAU8evCxRERkf+2z0N39PaDoa4bMAJ7xRh8DqWY2KFwBRUSkbcKxhp4B5Da7ndd031eY2Swzyzaz7IKCgjBsWkREPtehVyxy9yeAJwCysrJ0dWoR6XJqQw2UVNVRUlVLSVUdpVUhSqvrKK2qo7Q6RFl1iPKaOsqrQ5TX1FNRE6KyNkRFbT2VNSEq6+q548xD+XbW4LBnC0ehbwOaJ8tsuk9EpNNzd0qq6sgvqyG/tIb8smoKy2soLK+lsLyGooraLz6KK+sorwl97fPFRBnJ8TH0jIuiZ2w0SXHRpCbGktE7isTYaBJjoxjer2e7vJZwFPo84HozmwMcDZS4+44wPK+IyEGrq29ge3EVW4sqydtTxbY9VWwrrmJHSRU7S6rZUVJNTajhK18XG92Dfj1j6ZsUR5+esRySlkRqYgy9E2NJTYwhJeH/f/RKiKFXfAzJ8dHEx0QF8Cob7bPQzewF4GSgn5nlAT8DYgDc/TFgPnAmkANUAle0V1gRkda4OztKqsnJL2dDQTmbCiu++NheXEVDswXeqB7GwF7xDEqJ5/DMVE4/LJ7+yXEM6NX4b1pyHP2S40iOi8bMgntRB2Cfhe7uF+/jcQeuC1siEZGvUV4T4rMdpazeXsqanaWs2VnGup1lVNTWfzEmOT6a4f16cuSQ3pw3KYPBfRK/+BiQHEd0VGQeU9mhb4qKiOyP2lADq7aXsCy3mGV5JSzLK2ZTYQXeNONOTYxhzIBkLpicycgByYxMS2Jk/yT6JcV2udl1OKjQRaTTqKgJkb1lD59s3E325j0syyv+Yn27f3IcEwencu4RGRyW3ovD0lMY0CuuWxb33qjQRSQw9Q3O0txi3ltXwP/kFLIst5hQgxPdwzgsI4VLjxnK5KG9mTSkNwNT4oOO2+mp0EWkQ5VU1fHvtfm89Vk+760roKSqjh4Gh2emcs2JIzh2RF+yhvUmMVb1tL/0PyYi7a6oopYFq3Yyf8UOPtqwm1CD0y8pltPHDeCkMWmcMLIfqYmxQcfs8lToItIuKmtDLFi1k1eXbOeDnELqG5xhfRO5+hsjOG3cACYNTqVHD61/h5MKXUTCxt1ZtGUPL3yay+srd1BZW09m7wSuPXEEZ00YxLhBvfQmZjtSoYvIQSutruOl7Dxe+HQr6/PL6RkbxTkT0jl/ciZZQ3trJt5BVOgicsA2FVbw1AebeGlRHhW19UwcnMr95x/O2RPS6Rmneulo+h8Xkf22LLeYx97dwBurdhLdwzhnQjqXHz+MCZmpQUfr1lToItJmCzcX8dBb6/ggZze94qO57uSRXHbcUPonax/xzkCFLiL7tGTrHn7/r3W8v76Qfklx3H7GWC45egjJ8TFBR5NmVOgislebCit44I01vL5yJ316xnLHmWO59JhhJMQGd4pY2TsVuoh8RXFlLQ+9tZ5nP95CbHQPbp46mqu/MVxvdHZy+u6IyBcaGpy/ZufywBtrKKmqY+aUIdw0dZTWyLsIFbqIALByWwl3vrqCZXklTBnWh1/MOIxDB/UKOpbsBxW6SDdXXVfPQ2+t50/vb6R3YiwPXXQEM45I1xGdXZAKXaQby95cxK0vLWdTYQXfzsrkzjPHkZKoPVe6KhW6SDdUG2rgwbfW8fi7G8joncBzVx/N8SP7BR1LDpIKXaSbWb+rjB/MWcpnO0qZedRg7jp7HEnaeyUi6Lso0k24Oy8uyuPuv6+kZ2w0f7osi9PGDQg6loSRCl2kG6ioCfHTv63klSXbOHZEXx6eeQT9e2lXxEijQheJcJsKK7h2djY5+eXcPHU0158ykiidzjYiqdBFItg7a/L5wZwlRPcwnrnyaE4YpTc+I5kKXSQCuTuPvruB3yxYy6EDe/H4pZMZ3Ccx6FjSzlToIhGmNtTAHa+u4KVFeUyfmM7950/QybS6CRW6SAQprqzl2tmL+GRTETdNHcWNp47SEZ/diApdJEJsK67isj9/Qm5RFQ9ddATnTsoIOpJ0sB5tGWRm08xsrZnlmNltrTw+xMzeMbMlZrbczM4Mf1QR2Zt1u8q44NEPyS+r4ZmrpqjMu6l9FrqZRQGPAGcA44CLzWxci2F3AXPdfRIwE/ivcAcVkdYt2lLEhY99RH2DM/faYzlmRN+gI0lA2jJDnwLkuPtGd68F5gAzWoxx4PPzbKYA28MXUUT25sOcQr7z5Kf06RnLy/95nE532821ZQ09A8htdjsPOLrFmJ8Db5rZDUBPYGprT2Rms4BZAEOGDNnfrCLSzDtr8rn22UUM79uTZ68+mrTkuKAjScDatIbeBhcDT7l7JnAmMNvMvvLc7v6Eu2e5e1ZaWlqYNi3S/byxciezZmczekASL8w6RmUuQNsKfRswuNntzKb7mrsKmAvg7h8B8YAOSRNpB2+u2sn1zy/msPQUnrv6GPr0jA06knQSbSn0hcAoMxtuZrE0vuk5r8WYrcCpAGZ2KI2FXhDOoCLSuMxy3fOLOSwjhWeumkJKgi5GIf/fPgvd3UPA9cAC4DMa92ZZZWb3mNn0pmG3ANeY2TLgBeByd/f2Ci3SHb23roBrn13EmIHJPHPlFHrFq8zly9p0YJG7zwfmt7jv7mafrwaOD280Efncws1FzJqdzSFpSTx71dGamUurwvWmqIi0k1XbS7jyqYWkpyQw+6oppCZqzVxap0IX6cQ2FVbw3f/+lKS4aGZffTT9krQ3i+ydCl2kk8ovrebSP39Cg8Psq44mIzUh6EjSyanQRTqh8poQVzy1kKKKWp664ihG9k8KOpJ0ATrbokgnU1ffwPefW8yanWU8eVkWEzJTg44kXYRm6CKdiLtzxysreG9dAf/73PF8c2z/oCNJF6JCF+lEHn13Ay8uyuMHp4xk5hSd70j2jwpdpJN4fcUOHnhjLdMnpnPzaaODjiNdkApdpBNYnlfMzXOXcuSQVB64YIIuGycHRIUuErBdpdVc/XQ2fXvG8filWcTH6ILOcmC0l4tIgKrr6rl29iLKa0K88v3jdBpcOSgqdJGAuDs//dtKluYW89h3jmTsQF1tSA6OllxEAvL0h5u/2KNl2vhBQceRCKBCFwnAJxt3c+9rnzH10AHcNFV7tEh4qNBFOtiu0mque34JQ/sk8uBFE+nRQ3u0SHhoDV2kA9XVN3Ddc4upqAnx/DVHk6yLVEgYqdBFOtCv5n9G9pY9/OHiSYwekBx0HIkwWnIR6SCvLd/BXz7YzBXHD2P6xPSg40gEUqGLdIBNhRX85OXlTBqSyu1nHBp0HIlQKnSRdlZdV891zy0mOsr44yVHEhutXztpH1pDF2ln9/xzNat3lPLn72bpqkPSrjRVEGlH/1i2nec/2cq1J47g1EMHBB1HIpwKXaSd5BZVcscrK5g0JJUffWtM0HGkG1Chi7SDuvoGbnhhCRj8YeYkYqL0qybtT2voIu3gd2+uY2luMY9cciSD+yQGHUe6CU0bRMLs/fUFPPbuBi6eMoSzJuikW9JxVOgiYVRUUcstc5cxsn8Sd589Lug40s20qdDNbJqZrTWzHDO7bS9jvm1mq81slZk9H96YIp2fu/Pjl5ZTXFnHH2ZOIiFWVx6SjrXPNXQziwIeAU4D8oCFZjbP3Vc3GzMKuB043t33mFn/9gos0lk998lW3vpsF3eddSjj0nWxCul4bZmhTwFy3H2ju9cCc4AZLcZcAzzi7nsA3D0/vDFFOrec/HJ++dpqvjGqH1cePzzoONJNtaXQM4DcZrfzmu5rbjQw2sw+MLOPzWxaa09kZrPMLNvMsgsKCg4ssUgnUxtq4Ka/LiEhJorfXajzm0twwvWmaDQwCjgZuBj4k5mlthzk7k+4e5a7Z6WlpYVp0yLBevjtdazcVsp950+gf6/4oONIN9aWQt8GDG52O7PpvubygHnuXufum4B1NBa8SETL3lzEo//ewLezMvnWYQODjiPdXFsKfSEwysyGm1ksMBOY12LM32icnWNm/WhcgtkYxpwinU5ZdR03z11KZu9E7j7nsKDjiOy70N09BFwPLAA+A+a6+yozu8fMpjcNWwDsNrPVwDvAre6+u71Ci3QG9/5zNdv2VPHgRRNJitNB1xK8Nv0Uuvt8YH6L++5u9rkDP2z6EIl4b67aydzsPK775iFMHton6DgigI4UFdlvheU13P7KCsYN6sWNp44OOo7IF/R3osh+cHfueGUFZdUhnr/mCF19SDoV/TSK7IeXF2/jzdW7uPVbYxgzMDnoOCJfokIXaaNtxVX8Yt4qpgzvw5Un6GhQ6XxU6CJt0NDg3PriMurd+d2FE4nS0aDSCanQRdpg9sdb+HDDbu46a5wuWCGdlgpdZB82FpTz69c/4+QxaVw8ZfC+v0AkICp0ka9R3+Dc8uIy4qKjuP/8CZhpqUU6L+22KPI1nnhvI0u2FvPwzCMYoBNvSSenGbrIXqzZWcqD/1rHmYcPZPrE9KDjiOyTCl2kFbWhBm6Zu4xeCdHcO2O8llqkS9CSi0gr/vhODqu2l/L4pZPpmxQXdByRNtEMXaSF5XnFPPJODudNytA5zqVLUaGLNFNdV88P5y4jLSmOn+kc59LFaMlFpJnf/2sdOfnlPH3lFFISY4KOI7JfNEMXabJwcxF/en8jlxw9hJNG65q30vWo0EWAipoQP3pxGZm9E7jjzEODjiNyQLTkIgLc9/oathZV8sI1x+hyctJlaYYu3d776wuY/fEWrjp+OMeM6Bt0HJEDpkKXbq2kqo5bX1zOyP5J/OhbY4KOI3JQVOjSrf3iH6soKK/h99+eSHxMVNBxRA6KCl26rTdW7uCVxdu47psjmZCZGnQckYOmQpduKb+smjteXcnhGSnccMrIoOOIhIUKXbodd+f2l1dQXhPiwYsmEhOlXwOJDPpJlm7nrwtzeXtNPj+ZNpaR/ZODjiMSNip06Va27q7k3n+u5tgRfbniuGFBxxEJKxW6dBuh+gZunruUHj2M3357Ij166BznElnaVOhmNs3M1ppZjpnd9jXjzjczN7Os8EUUCY/H3t3Aoi17+OW548lITQg6jkjY7bPQzSwKeAQ4AxgHXGxm41oZlwzcCHwS7pAiB2t5XjEPvbWecyamM+OIjKDjiLSLtszQpwA57r7R3WuBOcCMVsbdC9wPVIcxn8hBq6qt56a/LiUtOY5fzhgfdByRdtOWQs8Acpvdzmu67wtmdiQw2N1f+7onMrNZZpZtZtkFBQX7HVbkQNz72mo2FVbw2wsn6hznEtEO+k1RM+sB/B64ZV9j3f0Jd89y96y0NJ1vWtrfglU7ef6Trcz6xgiOH9kv6Dgi7aothb4NGNzsdmbTfZ9LBsYD/zazzcAxwDy9MSpB21VazW0vL2d8Ri9uOV0n3pLI15ZCXwiMMrPhZhYLzATmff6gu5e4ez93H+buw4CPgenunt0uiUXaoKHB+dGLy6iqq+fhmZOIjdYeuhL59vlT7u4h4HpgAfAZMNfdV5nZPWY2vb0DihyIJ97fyPvrC7n77MM4JC0p6DgiHaJNl2Zx9/nA/Bb33b2XsScffCyRA7dk6x5+u2AtZx4+kIunDN73F4hECP0dKhGltLqOH8xZwoBe8fz6vAmY6WhQ6T508USJGO7Ona+uZHtxNXOvPZaUBO2iKN2LZugSMeYszOUfy7bzw9NGM3lo76DjiHQ4FbpEhNXbS/nZvFV8Y1Q//vOkQ4KOIxIIFbp0eWXVdVz3/GJ6J8bw0EVH6CyK0m1pDV26NHfntldWsLWokheuOYa+SXFBRxIJjGbo0qU989EWXlu+g1tOH82U4X2CjiMSKBW6dFmLthRx7z9Xc+rY/nzvRK2bi6jQpUsqKKvh+88tJj01gd9r3VwE0Bq6dEGh+gZueGExxZV1vPL9o7S/uUgTFbp0Ofe9voaPNxbx2wsnclh6StBxRDoNLblIl/LK4jye/J9NfPfYoVwwOTPoOCKdigpduozlecXc9soKjhnRh7vO/splbUW6PRW6dAkFZTVcO3sRaUlxPHLJkcRE6UdXpCWtoUunV11Xz6zZ2eyprOWl7x2ng4dE9kKFLp2au/Pjl5azZGsxj33nSMZn6E1Qkb3R363SqT389nrmLdvOj6eNYdr4QUHHEenUVOjSaf196TYeems95x+ZqTMoirSBCl06pQ83FPKjF5cxZXgffnXeeF15SKQNVOjS6azZWcq1zyxiWN+e/OnSLOKio4KOJNIlqNClU9lRUsUVf1lIQmwUT105hZREHdYv0lbay0U6jT0VtVz2508pqw7x12uPISM1IehIIl2KCl06hfKaEJc/tZAtRZU8dcVROkeLyAHQkosEriZUz7Wzs1m5rYQ/XjyJ4w7pF3QkkS5JhS6Bqqtv4Ibnl/BBzm4eOH8Cpx82MOhIIl2WCl0CE6pv4MY5S3hz9S5+Mf0wztfZE0UOigpdAhGqb+DmucuYv2Ind511KN89bljQkUS6vDYVuplNM7O1ZpZjZre18vgPzWy1mS03s7fNbGj4o0qkCNU3cMuLy/jHsu3cdsZYrv7GiKAjiUSEfRa6mUUBjwBnAOOAi82s5cmolwBZ7j4BeAl4INxBJTLUhhq44YUl/H3pdm791hi+p0P6RcKmLTP0KUCOu29091pgDjCj+QB3f8fdK5tufgxoMVS+orqunv98dhGvr2xcZrnumyODjiQSUdpS6BlAbrPbeU337c1VwOutPWBms8ws28yyCwoK2p5SurzymhBXPb2Qt9fk88tzx2uZRaQdhPXAIjP7DpAFnNTa4+7+BPAEQFZWlodz29J5FZbXcMVfFrJ6Rym/u3Ci9mYRaSdtKfRtwOBmtzOb7vsSM5sK3Amc5O414YknXV1uUSWX/vkTdpZW86fLJnPK2AFBRxKJWG0p9IXAKDMbTmORzwQuaT7AzCYBjwPT3D0/7CmlS1qaW8zVT2cTamjguauPYfLQ3kFHEolo+1xDd/cQcD2wAPgMmOvuq8zsHjOb3jTsN0AS8KKZLTWzee2WWLqE15bv4KLHPyIxNoqXvnesylykA7RpDd3d5wPzW9x3d7PPp4Y5l3RR7s5//XsDv1mwlslDe/PEpZN1UWeRDqKzLUrYVNSE+PFLy3ltxQ6mT0zngQsmEB+ji1OIdBQVuoTF5sIKZs3OJie/nNvPGMusE0fosnEiHUyFLgftjZU7uPWl5UT1MJ658mhOGKXT34oEQYUuB6y6rp5fz/+Mpz/awsTMFP54yZEM7pMYdCyRbkuFLgdk/a4ybpyzlNU7Srn6hOH8eNpYYqN18k6RIKnQZb80NDh/+XAz97+xhqS4aJ68LIup43SwkEhnoEKXNsstquQnLy/nww27mXpof3593gTSkrVLokhnoUKXfapvcP7ywSZ+9+Y6ehjcd97hXHTUYO3FItLJqNDla63IK+Guv61gWV4Jp4ztzy/PHU96akLQsUSkFSp0aVVxZS2/WbCW5z/dSt+esfzh4kmcM2GQZuUinZgKXb6kNtTA859s4eG311NaHeLy44Zx82mj6RUfE3Q0EdkHFboAjedgeWPlTu5/Yw2bd1dy7Ii+/Gz6OMYO7BV0NBFpIxV6N+fu/HtdAQ/+ax3L80oY1T+Jv1x+FCePSdPyikgXo0Lvpj4v8v/z9noWby0ms3cCD5w/gfOOzCA6SgcIiXRFKvRuJlTfwGsrdvDovzewZmcZ6Snx/Oo/DueCyZk60lOki1OhdxN7KmqZszCX2R9tZntJNSP7J/HbCycyfWK6ilwkQqjQI5i7s3hrMXM+3co/lm+nuq6B4w7pyy9mjOfUsf3p0UNr5CKRRIUegfLLqpm3dDsvZuexdlcZibFR/MekTC4/bhhjBiYHHU9E2okKPUKUVdfx9mf5/G3pNt5fX0h9gzMxM4Vfn3c450xMJylO32qRSKff8i5sT0Ut76zNZ/6Knby3voDaUAPpKfF876QR/MekDEb212xcpDtRoXch7s7aXWW8u7aAt9fkk725iAaHgb3i+c7RQzlrwkAmDe6ttXGRbkqF3sntKKniow27+XDDbt5fX8Cu0hoAxg5M5rpvjmTqoQM4PCNFJS4iKvTOpKHB2VhYTvbmPSzcvIfsLUVs2V0JQGpiDMcf0o8TR/fjxNFpDErRGQ9F5MtU6AFxd7YWVbJqeykrt5WwLK+Y5bkllNWEAOjTM5bJQ3tz6TFDOfaQvhw6sJdm4SLytVTo7czdKSyvJSe/nJz8MtbsLGNt08fn5R3dwxg7KJnpR6QzcXAqk4f2ZkS/njqXiojsFxV6GLg7uytqyS2qZGtRJVt2V7K5sIJNuyvYVFhBcWXdF2OT46MZOzCZGZPSOSw9hfHpKYwakER8TFSAr0BEIoEKfR8aGpw9lbXsKq0hv6yaXaXV7CipZmdJNdtLqtm2p5LtxdVU1dV/6evSU+IZ1q8nZx4+iJFpSYzs3/gxKCVeM28RaRfdqtAbGpyK2hAlVXWNH5V1FFfVsaeyluLKOnaX11JUUcPuilp2l9dSWF5DUUUtoQb/0vOYQb+kOAalxDN6QDInj+lPRmoCQ/smMqRPIpm9E0mI1YxbRDpWmwrdzKYBDwNRwJPufl+Lx+OAZ4DJwG7gInffHN6ojXKLKlmfX0ZlbT2VtfVUffFviIraeipqQpTXhL74t6y68d/SqjrKa0K06OYvSYyNok/PWPr2jGVQSjyHZ6TQLzmWtKQ4+veKZ0CvOPonxzOgV7xOaCUinc4+C93MooBHgNOAPGChmc1z99XNhl0F7HH3kWY2E7gfuKg9Ar+2Ygf3vb6mlZyQGBNFz7hokuKiSYyLIjkuhsF9EkmOi6ZXQgzJ8dEkx0eTmhBLr4QYUhJiSE2MoXdiLKmJMVrHFpEurS0z9ClAjrtvBDCzOcAMoHmhzwB+3vT5S8Afzczc/Wvmwwfm3CMyOHZEXxJio0iIiSIhNoqesdHEx/TQ2rSIdGttKfQMILfZ7Tzg6L2NcfeQmZUAfYHC5oPMbBYwC2DIkCEHFHhgSjwDU+IP6GtFRCJZhy4Eu/sT7p7l7llpaWkduWkRkYjXlkLfBgxudjuz6b5Wx5hZNJBC45ujIiLSQdpS6AuBUWY23MxigZnAvBZj5gHfbfr8AuD/tsf6uYiI7N0+19Cb1sSvBxbQuNvif7v7KjO7B8h293nAn4HZZpYDFNFY+iIi0oHatB+6u88H5re47+5mn1cDF4Y3moiI7A8dHSMiEiFU6CIiEUKFLiISIVToIiIRQoUuIhIhVOgiIhFChS4iEiFU6CIiEUKFLiISIVToIiIRQoUuIhIhVOgiIhHCgjrLrZkVAFsC2fjB6UeLKzF1E93xdes1dx9d6XUPdfdWrxAUWKF3VWaW7e5ZQefoaN3xdes1dx+R8rq15CIiEiFU6CIiEUKFvv+eCDpAQLrj69Zr7j4i4nVrDV1EJEJohi4iEiFU6CIiEUKFfhDM7BYzczPrF3SW9mZmvzGzNWa23MxeNbPUoDO1JzObZmZrzSzHzG4LOk97M7PBZvaOma02s1VmdmPQmTqKmUWZ2RIz+2fQWQ6WCv0Amdlg4HRga9BZOsi/gPHuPgFYB9wecJ52Y2ZRwCPAGcA44GIzGxdsqnYXAm5x93HAMcB13eA1f+5G4LOgQ4SDCv3APQj8GOgW7yq7+5vuHmq6+TGQGWSedjYFyHH3je5eC8wBZgScqV25+w53X9z0eRmNBZcRbKr2Z2aZwBgZNSgAAAGCSURBVFnAk0FnCQcV+gEwsxnANndfFnSWgFwJvB50iHaUAeQ2u51HNyi3z5nZMGAS8EmwSTrEQzROzBqCDhIO0UEH6KzM7C1gYCsP3QncQeNyS0T5utfs7n9vGnMnjX+eP9eR2aRjmFkS8DJwk7uXBp2nPZnZ2UC+uy8ys5ODzhMOKvS9cPeprd1vZocDw4FlZgaNSw+LzWyKu+/swIhht7fX/Dkzuxw4GzjVI/sAhm3A4Ga3M5vui2hmFkNjmT/n7q8EnacDHA9MN7MzgXigl5k96+7fCTjXAdOBRQfJzDYDWe7eVc7UdkDMbBrwe+Akdy8IOk97MrNoGt/4PZXGIl8IXOLuqwIN1o6scXbyNFDk7jcFnaejNc3Qf+TuZwed5WBoDV3a6o9AMvAvM1tqZo8FHai9NL35ez2wgMY3B+dGcpk3OR64FDil6fu7tGnmKl2IZugiIhFCM3QRkQihQhcRiRAqdBGRCKFCFxGJECp0EZEIoUIXEYkQKnQRkQjx/wCSDZ9SsanQ/wAAAABJRU5ErkJggg==\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "HoALp9Wl4rWm"
      },
      "source": [
        ""
      ],
      "execution_count": null,
      "outputs": []
    }
  ]
}